// pages/index/afford/afford.js
import request from "../../../utils/request";

Page({
  data: {
    isSelected: false,
    billId: '', // 账单ID
    orderAmount: 0, // 支付金额（差额）
    countdownText: '15:00', // 倒计时显示
    countdownEnded: false, // 是否超时
    countdownInterval: null, // 定时器
    orderType: '', // 支付场景
    elderlyId: '' // 老人ID（用于后续修改余额）
  },

  // 勾选支付协议
  toggleSelect() {
    if (!this.data.countdownEnded) {
      this.setData({
        isSelected: !this.data.isSelected
      });
    }
  },

  // 点击支付按钮
  handlePay() {
    const {
      isSelected,
      countdownEnded,
      billId,
      orderAmount,
      elderlyId
    } = this.data;
    // 新增：校验老人ID是否存在（避免后续改余额接口参数缺失）
    if (!elderlyId) {
      wx.showToast({
        title: '老人信息缺失，无法完成支付',
        icon: 'none'
      });
      return;
    }
    if (countdownEnded) {
      wx.showToast({
        title: '支付超时，请重新发起',
        icon: 'none'
      });
      return;
    }
    if (!isSelected) {
      wx.showToast({
        title: '请先勾选微信支付',
        icon: 'none'
      });
      return;
    }
    // 调用支付接口（传递老人ID，用于后续改余额）
    this.payOrder(billId, orderAmount, elderlyId);
  },

  // 返回上一页
  toMy() {
    wx.navigateBack();
  },

  /**
   * 支付核心逻辑：先更新账单状态，再调用余额归0接口
   * @param {string} billId - 账单ID
   * @param {number} payAmount - 支付金额
   * @param {string} elderlyId - 老人ID（关键：用于改余额）
   */
  payOrder(billId, payAmount, elderlyId) {
    wx.showLoading({
      title: '支付中...',
      mask: true
    });

    // 1. 第一步：调用原支付接口（更新账单状态为已支付）
    request({
      url: '/financialManagement/accountEntryList',
      method: 'PUT',
      data: {
        id: billId,
        transactionStatus: 1,
        paymentChannel: "线上",
        paymentMethod: "微信"
      }
    }).then(payResp => {
      // 2. 支付接口成功后，第二步：调用余额修改接口（将prepaymentBalance归0）
      // 2. 支付接口成功后，第二步：调用余额修改接口（将prepaymentBalance归0）
      if (payResp.data.code === 200) {
        this.resetPrepaymentBalance(elderlyId)
          .then(resetResp => {
            // 3. 余额归0成功：提示+立即跳转到支付成功页（无延时）
            wx.hideLoading();
            wx.showToast({
              title: '支付成功',
              icon: 'success'
            });
            // 直接跳转，移除setTimeout
            wx.navigateTo({
              url: '/pages/index/affordsuccess/affordsuccess'
            });
          })
          .catch(resetErr => {
            // 4. 余额归0失败：仍提示支付成功，立即跳转（无延时）
            wx.hideLoading();
            wx.showToast({
              title: '支付成功',
              icon: 'none'
            });
            // 直接跳转，移除setTimeout
            wx.navigateTo({
              url: '/pages/index/affordsuccess/affordsuccess'
            });
          });

      } else {
        // 5. 原支付接口失败：直接提示
        wx.hideLoading();
        wx.showToast({
          title: payResp.data.msg || '支付失败',
          icon: 'none'
        });
      }
    }).catch(payErr => {
      // 6. 原支付接口网络异常：提示
      wx.hideLoading();
      console.error('支付接口异常：', payErr);
      wx.showToast({
        title: '网络异常，请重试',
        icon: 'none'
      });
    });
  },

  /**
   * 新增：调用余额修改接口，将prepaymentBalance归0
   * @param {string} elderlyId - 老人ID（后端根据此ID定位余额记录）
   * @returns {Promise} - 接口请求Promise
   */
  resetPrepaymentBalance(elderlyId) {
    return new Promise((resolve, reject) => {
      request({
        url: '/balance/balancefind/editByElderlyId', // 后端余额修改接口地址
        method: 'PUT', // 接口请求方式（与后端@PutMapping一致）
        data: {
          elderlyId: elderlyId, // 关键：传递老人ID，定位要修改的余额记录
          prepaymentBalance: 0 // 关键：将余额字段设为0
        }
      }).then(resp => {
        // 后端返回AjaxResult，通常code=200或success=true表示成功（需与后端确认）
        if (resp.data.code === 200 || resp.data.success) {
          resolve(resp); // 余额清零成功
        } else {
          reject(new Error(resp.data.msg || '余额清零失败')); // 余额清零失败
        }
      }).catch(err => {
        console.error('余额修改接口异常：', err);
        reject(err); // 网络异常
      });
    });
  },

  // 以下为原有倒计时相关方法，无修改
  startCountdown() {
    const totalSeconds = 15 * 60;
    let remainingSeconds = totalSeconds;
    if (this.data.countdownInterval) clearInterval(this.data.countdownInterval);
    this.updateCountdownText(remainingSeconds);
    const interval = setInterval(() => {
      remainingSeconds--;
      if (remainingSeconds <= 0) {
        clearInterval(interval);
        this.setData({
          countdownText: '00:00',
          countdownEnded: true,
          isSelected: false,
          countdownInterval: null
        });
        wx.showToast({
          title: '支付超时',
          icon: 'none'
        });
        return;
      }
      this.updateCountdownText(remainingSeconds);
    }, 1000);
    this.setData({
      countdownInterval: interval
    });
  },

  updateCountdownText(remainingSeconds) {
    const minutes = Math.floor(remainingSeconds / 60);
    const seconds = remainingSeconds % 60;
    this.setData({
      countdownText: `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`
    });
  },

  onLoad(options) {
    const billId = options.billId || '';
    const amount = parseFloat(decodeURIComponent(options.amount || '0')) || 0;
    const orderType = options.orderType || '';
    const elderlyId = options.elderlyId || '';
    this.setData({
      billId,
      orderAmount: Number(amount.toFixed(2)),
      orderType,
      elderlyId
    });
    console.log('支付页参数：', {
      billId,
      金额: this.data.orderAmount,
      老人Id: this.data.elderlyId
    });
    this.startCountdown();
  },

  onUnload() {
    if (this.data.countdownInterval) clearInterval(this.data.countdownInterval);
  },

  onHide() {
    if (this.data.countdownInterval) clearInterval(this.data.countdownInterval);
  },

  onShow() {
    if (!this.data.countdownEnded && !this.data.countdownInterval) {
      const currentText = this.data.countdownText;
      if (currentText !== '15:00' && currentText !== '00:00') {
        const [minutes, seconds] = currentText.split(':').map(Number);
        this.startCountdownFromRemaining(minutes * 60 + seconds);
      } else {
        this.startCountdown();
      }
    }
  },

  startCountdownFromRemaining(remainingSeconds) {
    if (this.data.countdownInterval) clearInterval(this.data.countdownInterval);
    this.updateCountdownText(remainingSeconds);
    const interval = setInterval(() => {
      remainingSeconds--;
      if (remainingSeconds <= 0) {
        clearInterval(interval);
        this.setData({
          countdownText: '00:00',
          countdownEnded: true,
          isSelected: false,
          countdownInterval: null
        });
        wx.showToast({
          title: '支付超时',
          icon: 'none'
        });
        return;
      }
      this.updateCountdownText(remainingSeconds);
    }, 1000);
    this.setData({
      countdownInterval: interval
    });
  }
});